/**
 * 导入路由类型定义：初始化路由配置(值得学)
 * 1.使用vite的glob批量导入路由文件
 * 2.对导入的所有路由进行格式化
 * 3.导出所有格式化的路由
 */
import type { RouteRecordNormalized } from 'vue-router';

/**
 * 使用vite的 GlobImport 动态导入某个文件夹下的多个vue页面
 * 1.vite1.0只能手写映射关系, vite2.0本地没问题生产有问题, vite提供GlobImport方法
 * 2.直接使用import.meta.glob会报属性不存在
 * 3.tsconfig文件中添加类型定义vite/client即可解决红色波澜线错误
 * 4.参数一模块文件目录, 参数二是否开启懒加载
 */

// 批量导入所有主要路由
const modules = import.meta.glob('./modules/*.ts', { eager: true });
// 批量导入所有额外路由
const externalModules = import.meta.glob('./externalModules/*.ts', {
  eager: true,
});

// 格式化以上的路由配置(初始化路由配置数组)
function formatModules(_modules: any, result: RouteRecordNormalized[]) {
  Object.keys(_modules).forEach((key) => {
    const defaultModule = _modules[key].default;
    if (!defaultModule) return;
    // 判断默认配置是否是数组, 数组则打平数组, 对象则化数组
    const moduleList = Array.isArray(defaultModule) ? [...defaultModule] : [defaultModule];
    result.push(...moduleList);
  });
  return result;
}

// 导出所有主要路由
export const appRoutes: RouteRecordNormalized[] = formatModules(modules, []);

// 导出所有额外路由
export const appExternalRoutes: RouteRecordNormalized[] = formatModules(externalModules, []);